/* 
抽象问题：
数组代表区间，每项代表重新中毒(重复条件)的时间，另一个参数代表中毒持续时间(重复次数),求总共中毒时间(总重复次数)
*/

/* 
我们只需要对数组进行一次扫描就可以计算出总的中毒持续时间。我们记录艾希恢复为未中毒的起始时间expired，
设艾希遭遇第 i 次的攻击的时间为timeSeries[i]。当艾希遭遇第 i 攻击时：

如果当前他正处于未中毒状态，则此时他的中毒持续时间应增加duration​，同时更新本次中毒结束时间expired​ 
等于timeSeries[i]+duration​；
如果当前他正处于中毒状态，由于中毒状态不可叠加，我们知道上次中毒后结束时间为expired​​，本次中毒后结束时间为timeSeries[i]+duration​​，
因此本次中毒增加的持续中毒时间为timeSeries[i]+duration−expired​​；
我们将每次中毒后增加的持续中毒时间相加即为总的持续中毒时间。
*/


/**
 * @param {number[]} timeSeries
 * @param {number} duration
 * @return {number}
 */
var findPoisonedDuration = function(timeSeries, duration) {
  /* let ans = 0;
  let expired = 0;// 恢复到未中毒的时间点
  for (let i = 0; i < timeSeries.length; ++i) {
      if (timeSeries[i] >= expired) {
          ans += duration;
      } else {
          ans += timeSeries[i] + duration - expired;
      }
      expired = timeSeries[i] + duration;
  }
  return ans; */

  let res=duration
  for (let i = 1; i < timeSeries.length; ++i) {
    // 判断时间间隔与中毒持续时间,谁小用谁做中毒时间
    if(timeSeries[i]-timeSeries[i-1]<duration){
      res+=timeSeries[i]-timeSeries[i-1]
    }else{
      res+=duration
    }
  }
  return res
};

let timeSeries = [1,2,3,4,5,6,7,8,9], duration = 2
let res=findPoisonedDuration(timeSeries, duration)
console.log(res);